<template>
  <div class="dt-importFile">
    <el-upload
      class="upload-demo"
      :auto-upload="false"
      :on-change="onChange"
      :on-remove="onRemove"
      :limit="5"
      :before-upload="handleBeforeUpload"
      action=""
      :multiple="multiple"
      :file-list="fileList"
    >
      <!-- 上传按钮 -->
      <el-button size="mini" type="primary">选取文件</el-button>
      <!-- 上传提示 -->
      <div slot="tip" class="el-upload__tip">
        请上传
        <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
        <!-- <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> -->
        的文件
      </div>
    </el-upload>
  </div>
</template>

<script>

export default {
  name: 'AuthUpload',
  props: {
    multiple: {
      type: Boolean,
      default: false
    },
    type: {
      type: String,
      default: ''
    },
    // 大小限制(MB)
    fileSize: {
      type: Number,
      default: 5
    },
    // 文件类型, 例如['png', 'jpg', 'jpeg']
    fileType: {
      type: Array,
      default: () => ['doc', 'docx', 'xlsx', 'xls', 'ppt', 'txt', 'pdf']
    }

  },
  data() {
    return {
      fileList: []
    }
  },
  methods: {
    onChange(file, fileList) {
      if (fileList.length > 1) {
        fileList.splice(0, 1)
      }
      // 判断file是否是新增
      let isExist = false
      isExist = this.fileList.some((item) => {
        if (item.name == file.name) { return true }
      })
      if (!isExist) {
        this.handleValidate(file, fileList)
      } else {
        // // 如果已经存在
        // fileList.some((item, index) => {
        //   if (item.uid == file.uid) {
        //     fileList.splice(index, 1)
        //   }
        // })
        // this.$message.error(`已经存在文件${file.name}, 请勿重复上传`)
        // return false
      }
    },
    onRemove(file, fileList) {
      this.fileList = fileList
    },
    // 上传前校检格式和大小
    handleBeforeUpload(file) {
      // 校检文件类型
      if (this.fileType) {
        let fileExtension = ''
        if (file.name.lastIndexOf('.') > -1) {
          fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
        }
        const isTypeOk = this.fileType.some((type) => {
          if (file.type.indexOf(type) > -1) return true
          if (fileExtension && fileExtension.indexOf(type) > -1) return true
          return false
        })
        if (!isTypeOk) {
          this.$dtModal.msgError(`文件格式不正确, 请上传${this.fileType.join('/')}格式文件!`)
          return false
        }
      }
      // 校检文件大小
      if (this.fileSize) {
        const isLt = file.size / 1024 / 1024 < this.fileSize
        if (!isLt) {
          this.$dtModal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`)
          return false
        }
      }
      this.$dtModal.loading('正在上传文件，请稍候...')
      this.number++
      return true
    },
    handleDownloadTemplate() {
      this.downLoadTemplate().then((res) => {
        const blob = new Blob([res.data], {
          type: 'application/vnd.ms-excel'
        })
        const objectUrl = URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.style.display = 'none'
        a.href = objectUrl // 指定下载链接
        a.download = `${this.type}模版` // 指定下载文件名
        a.click()
        URL.revokeObjectURL(a.href) // 释放URL对象
        this.downloadLoading = false
      })
    },
    handleValidate(file, fileList) {
      // 检测文件类型
      // const fileType = file.name.substring(file.name.lastIndexOf('.') + 1).toLowerCase()
      // const isFileTypeReady = fileType === 'xlsx' || fileType === 'xls' // 文件类型
      // 判断文件大小
      const isLt10M = file.size / 1024 / 1024 <= 10
      let isCheck = true
      if (!isLt10M) {
        this.$message.error('您上传文件超过系统限制的最大值，最大可上传10M的文件!')
        isCheck = false
      } else
      if (file.name.length > 50) {
        this.$message.error('文件名称过长，建议长度在50字符内!')
        isCheck = false
      }
      // if (!isFileTypeReady) {
      //   // 文件类型不符合
      //   this.$message.error('上传文件只能是xlsx/xls格式!')
      //   isCheck = false
      // }
      if (!isCheck) {
        // 如果不符合就删除
        fileList.some((item, index) => {
          if (item.uid == file.uid) {
            fileList.splice(index, 1)
          }
        })
        return false
      } else {
        // 其他校验  校验成功
        this.fileList = fileList
        return true
      }
    }

  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">
.upload-demo{
  margin-top: 10px;
}
::v-deep .el-upload{
  // width: 100%;
  .el-upload-dragger{
    width: 100%;
  }
}
</style>
